var _form_file = {};
var _form_file_type_exts_map = {};
if(!layui){
    throw new Error("form.file.js需要layui");
}

layui.use(['form', 'laydate', 'layer', 'upload', 'element', 'table'], function () {

    var laydate = layui.laydate;
    var form = layui.form;
    var upload = layui.upload;
    var element = layui.element;
    var table = layui.table;
    var layer = layui.layer;

    _form_file = {
        upload: {
            /**
             * 绑定上传
             * @param type      文件类型编码
             * @param elem          绑定的元素
             * @param url           上传的路径
             * @param container     上传后显示文件名称的容器(jquery对象)
             * @param before        上传之前执行
             * @param choose        选择后事件
             * @param done          上传之后执行
             * @param error         遇到错误执行
             * @param multiple      是否多选
             * @param accept        接受的文件类型
             * @param exts         接受的文件后缀
             * @param size         接受的文件大小
             * @param auto         是否自动上传
             * @param fileOrder    默认新上传的文件在下面(asc),如果想要新上传的文件在上面传此参数为desc
             * @param fileName     后台接受的该文件类型的名称
             */
            bind: function(para){

                var moveLoading;

                if(!para.elem){
                    para.elem = $('.file-upload');
                }
                if(!para.fileName){
                    para.fileName = 'tempFormFileIds';
                }
                if(!para.url){
                    if(para.temp && para.temp == '1'){
                        para.url = '/form/file/upload/totemp';
                    }else{
                        para.url = '/form/file/upload/toReal';
                    }

                }
                if(!para.container){
                    para.container = $('#'+para.type);
                }
                if(!para.before){
                    para.before = function(obj){
                        // console.log('上传文件...before...obj:');
                        // console.log(obj);
                    }
                }
                if(!para.choose){
                    para.choose = function(res){
                        // console.log("选中了文件....res:");
                        // console.log(res);
                        moveLoading = layer.msg('上传中。。。', {
                            icon: 16
                            , shade: 0.2,
                            time: false
                        });
                    }
                }
                if(!para.multiple){
                    para.multiple = true;
                }
                if(!para.accept){
                    para.accept = 'file';
                }
                if(!para.size){
                    para.size = 500*1024;
                }
                if(!para.auto){
                    para.auto = true;
                }
                if(!para.done){
                    para.done = function(res){
                        layer.close(moveLoading);
                        //默认传回来的有:   临时表id一条数据
                        if(res.flag){
                            layer.msg("上传成功",{icon:1});
                            //执行默认操作,
                            //1.在容器中添加文件名称
                            // 新建一个input隐藏域
                            if(para.container){
                                var newFileId = res.data.id;
                                var type =res.data.type+'';
                                var newIndex = $('.form-file-div-'+type).length*1;
                                if(para.fileOrder && para.fileOrder == 'desc'){
                                    $(para.container).prepend('<div class="clearfix form-file-div form-file-div-'+type+'">\n' +
                                        '                            <span class="fl file-name-span">'+res.data.fileName+'</span>\n' +
                                        '                            <img src="/plugin/common/images/89@2x.png" class="fr cursor" onclick="_form_file.del.delTemp(this,'+'&apos;'+newFileId+'&apos;'+','+'&apos;'+type+'&apos;'+')">\n' +
                                        '                            <input type="hidden" class="'+type+'-input" name="'+para.fileName+'['+newIndex+']" value="'+newFileId+'" />'+
                                        '                        </div>')
                                }else{
                                    $(para.container).append('<div class="clearfix form-file-div form-file-div-'+type+'">\n' +
                                        '                            <span class="fl file-name-span">'+res.data.fileName+'</span>\n' +
                                        '                            <img src="/plugin/common/images/89@2x.png" class="fr cursor" onclick="_form_file.del.delTemp(this,'+'&apos;'+newFileId+'&apos;'+','+'&apos;'+type+'&apos;'+')">\n' +
                                        '                            <input type="hidden" class="'+type+'-input" name="'+para.fileName+'['+newIndex+']" value="'+newFileId+'" />'+
                                        '                        </div>')
                                }

                            }
                            if(para.afterSuccess){
                                //上传成功之后的回调,如果有可以传个参数
                                para.afterSuccess(res);
                            }
                        }
                        if(para.tempFileIds && res.data && res.data.id){
                            para.tempFileIds[para.tempFileIds.length] = res.data.id;
                        }
                        console.log("上传成功了，res:");
                        console.log(res);
                        //在这里往容器中添加文件名称列表
                        console.log("添加上传文件名称");
                    }
                }
                if(!para.error){
                    para.error = function(res){
                        layer.msg("上传失败!",{icon:2});
                    }
                }

                if(!para.exts){
                    upload.render({
                        elem: para.elem
                        ,url: para.url
                        ,auto: para.auto
                        ,size: para.size //限制文件大小 ， 单位KB
                        ,before: para.before
                        ,choose: para.choose
                        ,multiple: para.multiple
                        ,accept: para.accept
                        ,size: para.size
                        ,done: para.done
                        ,error: para.error
                    });
                }else{
                    upload.render({
                        elem: para.elem
                        ,url: para.url
                        ,auto: para.auto
                        ,size: para.size //限制文件大小 ， 单位KB
                        ,before: para.before
                        ,choose: para.choose
                        ,multiple: para.multiple
                        ,accept: para.accept
                        ,exts: para.exts
                        ,size: para.size
                        ,done: para.done
                        ,error: para.error
                    });
                }


            },
            getExts: function(type){
                return  _form_file_type_exts_map[type];
            }
        },
        //一些文件后缀
        exts: {
            //只允许文档:
            Only_Word:'doc|docx',
            //书著文件
            Only_Pdf: 'pdf',
        },
        del: {
            //编辑页面的删除,放入一个数组中,提交的时候再删除
            delReal: function(e,fileId,type,deledFileIds){
                console.log("删除非临时文件");
                var _that = $(e);
                layer.confirm('确定删除文件吗？', function (index) {

                    deledFileIds.push(fileId);
                    _that.parents('.form-file-div').remove();
                    layer.msg("删除成功",{icon:1});
                        _form_file.order.reOrder(type,function(){
                            layer.close(index);
                        });

                    // $.ajax({
                    //     url: '/form/file/del',
                    //     data: {fileId: fileId,temp: "0"},
                    //     type: 'post',
                    //     dataType: 'json',
                    //     success: function(res){
                    //         if(res.flag){
                    //             layer.msg("删除成功",{icon:1});
                    //             _that.parents('.form-file-div').remove();
                    //             //重排序:
                    //             _form_file.order.reOrder(type,function(){
                    //                 layer.close(index);
                    //             });
                    //             return ;
                    //         }else{
                    //             layer.msg(res.msg,{icon:2});
                    //             return ;
                    //         }
                    //     }
                    // })
                });
            },
            //新增表单页面的删除:
            delTemp: function(e,fileId,type){
                console.log("删除临时文件");
                var _that = $(e);
                layer.confirm('确定删除文件吗？', function (index) {
                    $.ajax({
                        url: '/form/file/del',
                        data: {fileId: fileId,temp: "1"},
                        type: 'post',
                        dataType: 'json',
                        success: function(res){
                            if(res.flag){
                                layer.msg("删除成功",{icon:1});
                                _that.parents('.form-file-div').remove();
                                //重排序:
                                _form_file.order.reOrder(type,function(){
                                    layer.close(index);
                                });
                                return ;
                            }else{
                                layer.msg(res.msg,{icon:2});
                                return ;
                            }
                        }
                    })
                });
            }
        },
        order: {
            reOrder: function(type,callback){
                //对某类型上传的文件重排序:
                var divs = $('.form-file-div-'+type);
                if(divs && divs.length > 0){
                    $.each($('.form-file-div-'+type),function(i,e){
                        var oldName = $(e).find('input.'+type+"-input").attr('name');
                        var oldNameBack = oldName.substring(oldName.lastIndexOf("]"));
                        var oldNameFront = oldName.substring(0,oldName.lastIndexOf("[")+1);
                        var newName = oldNameFront + i + oldNameBack;
                        $(e).find('input.'+type+"-input").attr('name',newName);
                    });
                    callback();
                }
            }
        }
    },
    //文件类型与上传文件对应关系:
    _form_file_type_exts_map = {
        //书著文件
        '1100060001': _form_file.exts.Only_Word,
        //书著扫描件:
        '1100060002': _form_file.exts.Only_Pdf,
        '301': _form_file.exts.Only_Word
    }

})